package com.lzhsite.leetcode.algoritom.practise.string;

/*
	【题目】
	给定一个字符串 str, 求其中全部数字串所代表的数字之和。
	
	【要求】
	
	忽略小数点，例如 “A1.3”，其中包含两个数字 1 和 3.
	如果紧贴数字子串的左侧出现字符"-"， 当连续出现的数量为奇数时，则数字视为负，连续出现的数量为偶数时，则数字视为正。比如，“A-1BC--12”， 其中包含数字 -1 和 12.
	若字符串的长度为N，时间复杂度为 O(N)， 额外空间复杂度为 O(1)
	【举例】
	str="A1CD2E33", 返回 36。
	str="A-1B--2C--D6E", 返回7。
*/
public class 字符串中数字子串的求和 {

	// 额外空间复杂度N
	public void sumNumSub() {

		String arr[] = "A-1B--2C--D6E".split("[^0-9-]");
		Integer sum = 0;
		for (int i = 0; i < arr.length; i++) {
			arr[i] = arr[i].trim();
			if (!"".equals(arr[i])) {
				if (arr[i].contains("-")) {

					if ("".equals(arr[i].replaceAll("-", ""))) {
						continue;
					}
					if (arr[i].lastIndexOf("-") % 2 == 0) {
						arr[i] = arr[i].replaceAll("-", "");
						sum = sum - Integer.valueOf(arr[i]);
					} else {
						arr[i] = arr[i].replaceAll("-", "");
						sum = sum + Integer.valueOf(arr[i]);
					}
				} else {
					sum = sum + Integer.valueOf(arr[i].trim());
				}

			}
		
		}
		System.out.println(sum);
	}

	public void sumNumSub2() {

		char arr[] = "A-1B--2C--D6E".toCharArray();
		int sum = 0, num=0;
		boolean isNeg = false;
		for (int i = 0; i < arr.length; i++) {
				if (arr[i] == '-') {
					if (arr[i - 1] == '-' && i > 0) {
						isNeg = !isNeg;
					} else {
						isNeg = true;
					}
				}else{
					if(arr[i]>='0' && arr[i]<='9'){
						num = num *10+ (isNeg?  -1:1) * (arr[i]-'0');
					} else{
						num = 0;
					}
				}
				
				sum=sum+ num;
		}
		System.out.println(sum);
	}
	public static void main(String[] args) {
		new 字符串中数字子串的求和 ().sumNumSub();
		new 字符串中数字子串的求和 ().sumNumSub2();
	}

}
